package com.weishi.project.training.service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.extension.service.IService;
import com.weishi.project.api.vo.*;
import com.weishi.project.training.domain.LeaveForm;
import com.weishi.project.training.domain.NaturalYear;
import com.weishi.project.training.domain.Sportsman;
import com.weishi.project.training.domain.TrainingWeek;

/**
 * leaveFormService接口
 */
public interface ILeaveFormService extends IService<LeaveForm> {

    /**
     * 查询leaveForm列表
     */
    List<LeaveForm> selectLeaveFormList(LeaveForm leaveForm);

    /**
     * 查询运动员姓名集合
     * @return List<String>
     */
    List<Sportsman> querySportsNameList();

    /**
     * 根据id查询请假详情
     * @param id
     * @return LeaveForm
     */
    LeaveForm getLeaveFormById(int id);

    /**
     * 更新请假信息
     * @param leaveForm
     */
    void updateLeaveFormById(LeaveForm leaveForm);

    boolean countLeaveFormById(int id);

    List<PeopleCountVo> getPeopleCount(Map<String,Object> map);

    List<PeopleEveryMonth> queryCount(Map<String,Object> map);

    /**
     * 根据运动员id查询请假信息
     * @param id
     * @return
     */
    LeaveForm queryBySportsmanId(int id);
    /**
     * 根据运动员id查询该运动员受伤史
     * @param map
     * @return
     */
    List<LeaveForm> queryBySportsmanIdAll(Map<String,Object> map);

    /**
     * 根据运动员id查询该运动员生病史
     * @param map
     * @return
     */
    List<LeaveForm> queryBySportsmanllness(Map<String,Object> map);

    /**
     * 根据运动员id查询该运动员过敏史
     * @param map
     * @return
     */
    List<LeaveForm> queryBySportsmanAllergy(Map<String,Object> map);

    int updateBySportsmanId(LeaveForm leaveForm);

    /**
     * 今日受伤，生病，请假，过敏等人数
     * @param map
     * @return int
     */
    int getCountByDay(Map<String,Object> map);

    /**
     * 根据当前日期查询所在周的开始时间和结束时间
     * @return TrainingWeek
     */
    TrainingWeek getWeekIdByNowDate();


    /**
     * 根据当前时期所在周的开始时间和结束时间查询周累计人数
     * @param map
     * @return int
     */
    int getCountByTime(Map<String,Object> map);

    /**
     * 判断当前时间所在的年 获取年的开始时间和结束时间
     * @return NaturalYear
     */
    NaturalYear getCountByYear();

    /**
     * 各类型累计人数统计
     * @return List<LeaveFormTypeVo>
     */
    List<LeaveFormTypeVo> getLeaveFormTypeVoCount(Map<String,Object> params);

    /**
     * 获取各类型各属性列表
     * @return List<SportsInjuryVo>
     */
    List<SportsInjuryVo> getSportsInjuryVoList(Map<String,Object> params);

    /**
     * 各受伤部位占比数据图
     * @return List<InjuryCountVo>
     */
    List<InjuryCountVo> getInjuryCountVoList(Map<String,Object> params);

    List<InjuryCountVo> getInjuryCountVoListOne(Map<String,Object> params);

    List<InjuryCountVo> getInjuryCountVoListTwo(Map<String,Object> params);

    List<InjuryCountVo> getInjuryCountVoListThree(Map<String,Object> params);

    List<InjuryCountVo> getInjuryCountVoListFour(Map<String,Object> params);

    List<LeaveFormInjuryVo> getLeaveFormInjuryVo(Map<String,Object> params);

    /**
     * 查看请假，离队，受伤，生病详情
     * @return List<LeaveForm>
     */
    List<LeaveForm> getLeaveFormDetails(Map<String,Object> params);

    /**
     * 查看今日考勤情况
     * @return
     */
    List<LeaveForm> getLeaveFormByNowDate(Map<String,Object> params);

    /**
     * 查看本周考勤情况
     * @return
     */
    List<LeaveForm> getLeaveFormByWeek(TrainingWeek trainingWeek);

}